//计算两个数组的交集  时间复杂度O(m+n)  空间复杂度O(m)
// var intersection = function(nums1, nums2) {
//   const map =new Map()
//   nums1.forEach(n => {
//     map.set(n, true)
//   })
//   const res = []
//   nums2.forEach(n => {
//     if(map.get(n)) {
//       res.push(n)
//       map.delete(n)
//     }
//   })
//   return res
// }

//有效的括号  时间复杂度O(n) 空间复杂度O(n)
var isValid = function(s) {
  if (s.length % 2 === 1) {return false}
  const stack = []
  const map = new Map()
  map.set('(', ')')
  map.set('{', '}')
  map.set('[', ']')
  for (let i =0; i < s.length; i++) {
    const c = s[i]
    if (map.has(c)) {
      stack.push(c)
    } else {
      const t = stack[stack.length - 1]
      if(map.get(t) === c ) {
        stack.pop()
      } else {
        return false
      }
    }
  }
  return stack.length === 0
}

//两数之和相加等于target就返回下标  事件复杂度O(n)  空间复杂度O(n)
var twoSum = function(nums, target) {
  const map = new Map()
  for (let i = 0; i < nums.length; i++) {
    const n = nums[i]
    if (map.has(n2)) {
      return [map.get(n2), i]
    } else {
      map.set(n, i)
    }
  }
}



